@Lemon
2年前 提问
1个回答

关系数据库中主键是

Anna艳娜
2年前

关系数据库中,主键是标识表中唯一的实体,可能包括 ID、序列号、用户名等。当记录与主表中的主记录有关系时,主键可以包含在另一个表的记录中,如果将主键添加到另一个表中的记录,则称为“外键”。主键和外键之间的连接创建了多个表中数据集之间的关系。

数据库表中主键的设置主要有三种方法,分别是:

  • 自增id

    这种主键非常常见,一般是从1开始递增,每新增一条数据,id自增一次,当然也有自增n次的。

    优点:

    • 数据库自动编号,速度快,而且是增量增长,聚集型主键按顺序存放,对于检索非常有利;

    • 占用空间小,易排序,在程序中传递方便。

    缺点:

    • 不容易对数据进行迁移,比如将数据迁移到其他表中的时候,很容易会导致主键的冲突或者关联关系的丢失;

    • 很难进行分表和分库,因为分表分库的时候,多张表中的自增id会有重复的,导致主键不唯一。

  • uuid

    UUID 是 通用唯一识别码(Universally Unique Identifier)的缩写,是一种软件建构的标准,它保证对在同一时空中的所有机器都是唯一的。

    当然uuid不是数据库独有的,uuid是分布式系统中的一种识别码。

    优点:

    • 全局唯一,且具有安全性,即很难通过上一个主键id推断出下一个主键id是多少;

    • 数据迁移的时候,主键id无影响,不但迁移到其他的表无影响,迁移到其他的库也没有影响。

    缺点:

    • 作为主键,UUID长度过长,主键索引KeyLength长度过大,影响索引查询性能

    • InnoDB为聚集主键类型的引擎,数据会按照主键进行排序,由于UUID的无序性,且uuid 主键可能会引起数据位置频繁变动,InnoDB会产生巨大的IO压力,严重影响性能。

  • 业务主键

    在数据库表中把具有业务逻辑含义的字段作为主键,比如身份证号、电话号码等。

    优点:

    • 业务主键的数据是真实存在的数据,用这些数据当作主键可以简化数据库的结构

    缺点:

    • 业务主键可能会有变更,比如电话号码,如果有变更,数据库的索引结构需要重新维护,增加的数据库性能的开销。